home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assembly / joycont.lha / ...cd / The_Archives / programmers / joycontrol.s
Encoding:
Text File  |  1980-02-06  |  2.4 KB  |  76 lines

  1.  
  2. vwait        cmpi.b    #255,$dff006    ; wait for vpos
  3.         bne.s    vwait
  4.  
  5.         bsr    joycontrol    ; call joystick reader routine
  6.         bsr    checkjoy    ; lets investigate what was pressed
  7.  
  8.         btst.b    #6,$bfe001    ; left mouse 
  9.         bne.s    vwait
  10.         rts
  11.  
  12. *****************************************************************************
  13. * JOYCONTROL: Allows easy detection of Joystick movements
  14. * -------------------------------------------------------
  15. * The routine checks movement & sets bits so that detection of directional 
  16. * joystick movement is possible. 
  17. *
  18. * INPUTS:  Joystick movements. No Parameters need setting
  19. * OUTPUTS: d2 - bits set corresponding to movements. See Example!
  20. *****************************************************************************
  21. Fire        = 0
  22. Left        = 1
  23. Right        = 2
  24. Up        = 3
  25. Down        = 4
  26.  
  27. JoyControl:    lea    $dff000,a5    ; ptr to hardware registers in a5
  28.         moveq    #0,d2        ; erase all previous joystick settings
  29.         tst.b    $bfe001        ; check if fire pressed..
  30.         bmi.s    NoFire        ; was fire button pressed?
  31.         bset    #Fire,d2    ; set 'fire' button as being pressed!
  32. NoFire:        move.w    $c(a5),d0    ; read joy0dat, put into d0
  33.         btst    #1,d0        ; was 'right' pressed with joystick?
  34.         beq.s    TstLeft        ; if=0 not set, lets check left...
  35.         bset    #Right,d2    ; set 'right' movement as being pressed
  36.         bra.s    TstDown        ; lets test Up/Down Movements aswell!
  37. TstLeft        btst    #9,d0        ; was 'Left' movement set?
  38.         beq.s    TstDown        ; lets check down movement..
  39.         bset    #Left,d2    ; set 'Left' movement bit
  40. TstDown        move.w    d0,d1        ; make copy of joydat, puts it into d1
  41.         lsr.w    #1,d1        ; divide by two..
  42.         eor.w    d0,d1        ; exclusive or together, up/donw in d1
  43.         btst    #0,d1        ; was 'Down' movement selected?
  44.         beq.s    TstUp        ; lets check up movement...
  45.         bset    #Down,d2    ; set 'down' movement bit
  46.         rts            ; exit routine..
  47. TstUp        btst    #8,d1        ; was up movement selected?
  48.         beq.s    NoActivity    ; no movement occured with joystick...
  49.         bset    #up,d2        ; 'up' movement was selected.. set bit
  50. NoActivity    rts            ; exit routine..
  51.  
  52. *******************************************************************************
  53. * d2=movement bits... as set by 'JoyControl' routine
  54.  
  55. CheckJoy    btst    #Fire,d2
  56.         beq.s    NotFire
  57.         move.w    #$f0f,$180(a5)    ;routine to call, fire was pressed
  58.  
  59. NotFire        btst    #Left,d2
  60.         beq.s    NoLeft
  61.         move.w    #$f00,$180(a5)    ;left
  62.  
  63. NoLeft        btst    #Right,d2
  64.         beq.s    NoRight
  65.         move.w    #$ff0,$180(a5)    ;right
  66.  
  67. NoRight        btst    #Up,d2
  68.         beq.s    NoUp
  69.         move.w    #$fff,$180(a5)    ;up
  70.  
  71. NoUp        btst    #Down,d2
  72.         beq.s    NoDown
  73.         move.w    #$00f,$180(a5)    ;down
  74. NoDown        rts
  75.  
  76.